From fadaced85ff9a2aceb9b315b4a000a22c81e8f81 Mon Sep 17 00:00:00 2001 From: Alexander Larsson Date: Fri, 8 Apr 2011 15:00:51 +0200 Subject: [PATCH] [broadway] Move window to top when moving --- gdk/broadway/broadway.js | 46 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 44 insertions(+), 2 deletions(-) diff --git a/gdk/broadway/broadway.js b/gdk/broadway/broadway.js index 167834b59a..83e2b28db8 100644 --- a/gdk/broadway/broadway.js +++ b/gdk/broadway/broadway.js @@ -122,6 +122,7 @@ var lastTimeStamp = 0; var realWindowWithMouse = 0; var windowWithMouse = 0; var surfaces = {}; +var stackingOrder = []; var outstandingCommands = new Array(); var inputSocket = null; var frameSizeX = -1; @@ -343,6 +344,7 @@ function cmdCreateSurface(id, x, y, width, height, isTemp) surface.document = document; surface.transientToplevel = null; surface.frame = null; + stackingOrder.push(id); var canvas = document.createElement("canvas"); canvas.width = width; @@ -488,11 +490,50 @@ function cmdSetTransientFor(id, parentId) } } +function restackWindows() { + if (useToplevelWindows) + return; + + for (var i = 0; i < stackingOrder.length; i++) { + var id = stackingOrder[i]; + var surface = surfaces[id]; + if (surface.frame) + surface.frame.style.zIndex = i; + else + surface.canvas.style.zIndex = i; + } +} + +function moveToTopHelper(surface) { + var i = stackingOrder.indexOf(surface.id); + stackingOrder.splice(i, 1); + stackingOrder.push(surface.id); + + for (var cid in surfaces) { + var child = surfaces[cid]; + if (child.transientParent == surface.id) + moveToTopHelper(child); + } +} + +function moveToTop(surface) { + moveToTopHelper(surface); + restackWindows(); +} + + function cmdDeleteSurface(id) { - var canvas = surfaces[id].canvas; - delete surfaces[id]; + var surface = surfaces[id]; + var i = stackingOrder.indexOf(id); + if (i >= 0) + stackingOrder.splice(i, 1); + var canvas = surface.canvas; canvas.parentNode.removeChild(canvas); + var frame = surface.frame; + if (frame) + frame.parentNode.removeChild(frame); + delete surfaces[id]; } function cmdMoveSurface(id, x, y) @@ -912,6 +953,7 @@ function onMouseDown (ev) { localGrab.frame = ev.target; localGrab.lastX = ev.pageX; localGrab.lastY = ev.pageY; + moveToTop(localGrab.frame.frameFor); return; } -- 2.30.2